package com.malou.server.ventas.movimiento.entrada;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.malou.client.ventas.movimiento.entrada.MovimientoEntrada;
import com.malou.client.ventas.movimiento.salida.MovimientoSalida;
import com.malou.server.base.Conexion;
import com.malou.server.base.util.GxtGridPaginate;
import com.malou.server.ventas.ingresostock.IngresoStocks;
import com.malou.server.ventas.serie.Series;

public class MovimientoEntradas {
	private static SqlMapClient sqlMap = null;
	public static Integer errorTipo = 0;
	public static String modeloPrenda = "";
	public static Integer tienda_id = null;
	
	@SuppressWarnings("unchecked")
	public static PagingLoadResult<MovimientoEntrada> getPaginate(GxtGridPaginate paginate) {		     
		
		sqlMap = Conexion.getSqlMap();
		paginate.setLimit();
		
		if(paginate.order.equals("")){
			paginate.order = " order by id desc";
		}
		List<MovimientoEntrada> data = null;
		try {
			data = sqlMap.queryForList("paginateMovimientoEntrada", paginate);				
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return new BasePagingLoadResult<MovimientoEntrada>(data, paginate.offset, count(paginate));
	}
	
	public static Integer count(GxtGridPaginate paginate){
		Integer count = null;
		try {
			count = (Integer) sqlMap.queryForObject("countMovimientoEntrada", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return count;
	}

	public static boolean save(List<MovimientoEntrada> list) {
		boolean retorno = true;		
        sqlMap = Conexion.getSqlMap();
        try {
        	Series.sqlMap = sqlMap;
        	sqlMap.startTransaction();        		
        	if(Series.hasSerieArticulo("notaingreso")){
	    		IngresoStocks.sqlMap = sqlMap;
	    		String numero = Series.actualizarNumeracion("notaingreso");
	    		for(MovimientoEntrada me : list){
	    			
	    			me.setTienda_id(tienda_id);
	    			me.setNumero(numero);
	    			sqlMap.insert("insertMovimientoEntrada", me);   
	    			
	    			sqlMap.update("updateMovimientoSalida", me);
					IngresoStocks.incrementaStockTienda(me.getModeloprenda_id(), me.getCantidad(), tienda_id);				
	    		}
        	}else{
        		retorno = false;    
        		errorTipo = 2; //no existe serie
        	}
        	if(retorno){ 
        		sqlMap.commitTransaction();
    		}
        	
        } catch (SQLException e) {
        	retorno = false;
			e.printStackTrace();
		}
        
     	try {
			sqlMap.endTransaction();
		} catch (SQLException e) {				
			e.printStackTrace();
		}
         
        return retorno;
	}

	@SuppressWarnings("unchecked")
	public static List<MovimientoSalida> getNumeroVales(Integer tienda_id) {
		sqlMap = Conexion.getSqlMap();
		List<MovimientoSalida> vales = null;		
		try {
			vales = sqlMap.queryForList("getNumeroVales", tienda_id);
			if(vales == null){
				vales = new ArrayList<MovimientoSalida>();
			}
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return vales;
	}

	@SuppressWarnings("unchecked")
	public static List<MovimientoEntrada> getEntradasPendientes(
			String numeroVale) {
		sqlMap = Conexion.getSqlMap();
		List<MovimientoEntrada> enviados = null;
		try {
			enviados = sqlMap.queryForList("getEntradasPendientes", numeroVale);
			if(enviados == null){
				enviados = new ArrayList<MovimientoEntrada>();
			}
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return enviados;
	}
	
}
